#ifndef SMUPDATE_H
#define SMUPDATE_H

#include "sys.h"

typedef enum {
  APP_NORMAL = 0,  // APP能正常稳定运行
  APP_UPDATED,     // APP刚更新完成，等待测试启动
  APP_ERROR        // APP错误，不能正常工作
} App_Status_t;

typedef enum { runBoot = 0, runUpdate, runApp0, runApp1, runError } runApp_t;

typedef struct {
  uint32_t sFlag;    /* 存储标志位  */
  uint32_t deviceID; /* 设备号      */
  uint32_t
      devType; /* 0. 启动到boot 1. 进入升级 2. 直接启动app0 3. 直接启动app1 */
  uint32_t appAddr;         /* 待启动app地址 */
  uint32_t hardwareVersion; /* 硬件版本信息 */
  uint32_t app0_Version;    /* APP0软件版本 */
  uint32_t app1_Version;    /* APP1软件版本 */
  uint32_t app0_Status;     /* APP0的状态.  */
  uint32_t app1_Status;     /* APP1的状态.  */

  macinfo_t macInfo; /* 设备信息 */

  ulong rfId;
  uint32_t SystemParamCRC;
} SysParam_t;

typedef void (*pFunction)(void);

extern SysParam_t sysRunCfg;

extern pFunction Jump_To_Application;
extern uint32_t JumpAddress;

extern ulong *pId;

#define getBleBaund() (sysRunCfg.macInfo.bleInfo.bleBaund)

void crcInit(void);
void updatfg2flash(void);
void SystemParamReadCheck(SysParam_t *pData);
void go2Boot(void);
#endif  // SMUPDATE_H
